package com.ctsi.system.service;

import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ctsi.common.util.Search;
import com.ctsi.core.common.entity.LoginUser;
import com.ctsi.system.dto.RoleDsReqDTO;
import com.ctsi.system.entity.Role;

import java.util.List;

/**
 * <p>
 * 系统角色表 服务类
 * </p>
 *
 * @author wang xiao xiang
 */
public interface IRoleService extends IService<Role> {

	/**
	 * 分页业务方法
	 *
	 * @param search 　搜索参数
	 * @return IPage
	 */
	IPage<Role> listPage(Search search);

	/**
	 * 获取用户角色相关信息
	 *
	 * @param userId 用户id
	 * @return 增强版hashMap，格式：[{"id":456, "code":"zjl", "name":"总经理"}]
	 */
	List<Dict> getLoginRoles(Long userId, Integer userType);

	/**
	 * 根据角色ID获取数据范围集合
	 *
	 * @param roleIdList 角色ID集合
	 * @param orgId      组织机构ID
	 * @return 数据范围ID集合
	 */
	List<Long> getUserDataScopeIdList(List<Long> roleIdList, Long orgId);

	/**
	 * 获取数据范围
	 *
	 * @param id 主键ID
	 * @return 组织ID列表
	 */
	List<String> getDataScope(String id);

	/**
	 * 设置数据范围
	 *
	 * @param loginUser 登录用户信息
	 * @param roleDsReq 数据范围请求对象
	 * @return 是否更新成功
	 */
	boolean setDataScope(LoginUser loginUser, RoleDsReqDTO roleDsReq);
}
